#pragma once

#include <string>
#include <set>
#include <functional>
#include "Singleton.h"
#include "MsgRouter.h"
#include "usersession.h"
#include "proxy_service.h"
#include "9100_agency_api.pb.h"


class AgencyApiBalance : public RpcProxy<
        SERVER_TYPE_AGENCY_API,
        agency_api::AGENCY_API_MSGID_GET_BALANCE_REQ, 
        agency_api::AGENCY_API_MSGID_GET_BALANCE_RESP,
        agency_api::BalanceReq,
        agency_api::BalanceResp
>{
public:
    AgencyApiBalance() = default;
    virtual ~AgencyApiBalance() = default;
public:
    static AgencyApiBalance* Instance()
	{
		return CSingleton<AgencyApiBalance>::Instance();
	}
};

class AgencyApiBet : public RpcProxy<
        SERVER_TYPE_AGENCY_API,
        agency_api::AGENCY_API_MSGID_BET_REQ, 
        agency_api::AGENCY_API_MSGID_BET_RESP,
        agency_api::BetReq,
        agency_api::BetResp
>{
public:
    AgencyApiBet() = default;
    virtual ~AgencyApiBet() = default;
public:
    static AgencyApiBet* Instance()
	{
		return CSingleton<AgencyApiBet>::Instance();
	}
};

class AgencyApiWin : public RpcProxy<
        SERVER_TYPE_AGENCY_API,
        agency_api::AGENCY_API_MSGID_WIN_REQ, 
        agency_api::AGENCY_API_MSGID_WIN_RESP,
        agency_api::WinReq,
        agency_api::WinResp
>{
public:
    AgencyApiWin() = default;
    virtual ~AgencyApiWin() = default;
public:
    static AgencyApiWin* Instance()
	{
		return CSingleton<AgencyApiWin>::Instance();
	}
};

class AgencyApiReward : public RpcProxy<
        SERVER_TYPE_AGENCY_API,
        agency_api::AGENCY_API_MSGID_REWARD_REQ, 
        agency_api::AGENCY_API_MSGID_REWARD_RESP,
        agency_api::RewardReq,
        agency_api::RewardResp
>{
public:
    AgencyApiReward() = default;
    virtual ~AgencyApiReward() = default;
public:
    static AgencyApiReward* Instance()
	{
		return CSingleton<AgencyApiReward>::Instance();
	}
};

class AgencyApiCancleBet : public RpcProxy<
        SERVER_TYPE_AGENCY_API,
        agency_api::AGENCY_API_MSGID_CANCLE_BET_REQ, 
        agency_api::AGENCY_API_MSGID_CANCLE_BET_RESP,
        agency_api::CancelBetReq,
        agency_api::CancelBetResp
>{
public:
    AgencyApiCancleBet() = default;
    virtual ~AgencyApiCancleBet() = default;
public:
    static AgencyApiCancleBet* Instance()
	{
		return CSingleton<AgencyApiCancleBet>::Instance();
	}
};

class AgencyApiBetWin : public RpcProxy<
        SERVER_TYPE_AGENCY_API,
        agency_api::AGENCY_API_MSGID_BET_AND_WIN_REQ, 
        agency_api::AGENCY_API_MSGID_BET_AND_WIN_RESP,
        agency_api::BetAndWinReq,
        agency_api::BetAndWinResp
>{
public:
    AgencyApiBetWin() = default;
    virtual ~AgencyApiBetWin() = default;
public:
    static AgencyApiBetWin* Instance()
	{
		return CSingleton<AgencyApiBetWin>::Instance();
	}
};

class AgencyApiCancleBetWin : public RpcProxy<
        SERVER_TYPE_AGENCY_API,
        agency_api::AGENCY_API_MSGID_CANCLE_BET_AND_WIN_REQ, 
        agency_api::AGENCY_API_MSGID_CANCLE_BET_AND_WIN_RESP,
        agency_api::CancleBetAndWinReq,
        agency_api::CancleBetAndWinResp
>{
public:
    AgencyApiCancleBetWin() = default;
    virtual ~AgencyApiCancleBetWin() = default;
public:
    static AgencyApiCancleBetWin* Instance()
	{
		return CSingleton<AgencyApiCancleBetWin>::Instance();
	}
};

class AgencyApiKickout : public NotifyProxy<
        SERVER_TYPE_AGENCY_API,
        agency_api::AGENCY_API_MSGID_KICK_PLAYER, 
        agency_api::KickPlayerPush
>{
public:
    AgencyApiKickout() = default;
    virtual ~AgencyApiKickout() = default;
public:
    static AgencyApiKickout* Instance()
	{
		return CSingleton<AgencyApiKickout>::Instance();
	}
};








